package com.example.demo.signal;

import sun.misc.Signal;
import sun.misc.SignalHandler;

/**
 * @author tiger
 * ShutdownHook响应的信号如下：
 * -1：如果使用了nohup则不响应；
 * -2：如果使用了后台&则不响应；
 * -15：都响应。
 */
public class DemoSignalHandler implements SignalHandler {

    public static void listenTo(String name) {
        Signal signal = new Signal(name);
        Signal.handle(signal, new DemoSignalHandler());
    }

    @Override
    public void handle(Signal signal) {
        // 信号量名称
        String name = signal.getName();
        // 信号量数值
        int number = signal.getNumber();

        // 当前进程名
        String currentThreadName = Thread.currentThread().getName();

        System.out.println("[Thread:"+currentThreadName + "] receved signal: " + name + " == kill -" + number);
        if(name.equals("TERM")){
            System.exit(0);
        }
    }
}
